package com.night.icm.service.base.service;


import com.night.icm.common.utils.PageDataDTO;
import com.night.icm.common.utils.SimpleDataDTO;
import com.night.icm.model.base.SystemDictionaryDTO;
import com.night.icm.model.base.SystemDictionaryValueDTO;

import java.util.List;

/**
 * DictionaryService
 *
 * @author Liao ZhiYong
 * @date 2019/12/22
 */
public interface DictionaryService {

    /**
     * 查找所有字典
     *
     * @return 字典集合
     */
    List<SystemDictionaryDTO> findAll();

    /**
     * 删除字典
     *
     * @param id 字典id
     */
    void deleteById(String id);

    /**
     * 新建字典
     *
     * @param systemDictionaryDTO 字典信息
     * @return 字典
     */
    SystemDictionaryDTO create(SystemDictionaryDTO systemDictionaryDTO);

    /**
     * 更新字典
     *
     * @param id                  字典id
     * @param systemDictionaryDTO 字典信息
     * @return 字典信息
     */
    SystemDictionaryDTO update(String id, SystemDictionaryDTO systemDictionaryDTO);

    /**
     * 分页查询字典信息
     *
     * @param page 页号，从0开始
     * @param size 每页纪录条数
     * @param sort 排序字段, 例如：字段1,asc,字段2,desc
     * @param code 字典编号
     * @param name 字典名称
     * @return 字典分页数据
     */
    PageDataDTO<SystemDictionaryDTO> findOnePage(int page, int size, String sort, String code, String name);

    /**
     * 新建字典值
     *
     * @param dictionaryId             字典id
     * @param systemDictionaryValueDTO 字典值信息
     * @return 字典值
     */
    SystemDictionaryValueDTO createValue(String dictionaryId, SystemDictionaryValueDTO systemDictionaryValueDTO);

    /**
     * 修改一个字典值
     *
     * @param dictionaryId             字典id
     * @param valueId                  字典值id
     * @param systemDictionaryValueDTO 字典值信息
     * @return 字典值
     */
    SystemDictionaryValueDTO updateValue(String dictionaryId, String valueId, SystemDictionaryValueDTO systemDictionaryValueDTO);

    /**
     * 检查字典值Key是否唯一
     *
     * @param dictionaryId      字典id
     * @param dictionaryValueId 字典值id
     * @param key               字典值key
     * @return 是否唯一
     */
    SimpleDataDTO<Boolean> checkDictionaryValue(String dictionaryId, String dictionaryValueId, String key);

    /**
     * 检查字典Code是否唯一
     *
     * @param dictionaryId 字典id
     * @param code         字典code
     * @return 是否唯一
     */
    SimpleDataDTO<Boolean> checkDictionaryCode(String dictionaryId, String code);

    /**
     * 删除一个字段值
     *
     * @param dictionaryId 字典id
     * @param valueId      字典值id
     */
    void deleteValue(String dictionaryId, String valueId);

    /**
     * 根据字典编号查找信息, 通常用于下拉框数据查找, 无需权限
     *
     * @param code 字典编号
     * @param all  是否为全部值（包括available为false的值）
     * @return 字典
     */
    SystemDictionaryDTO findByCode(String code, Boolean all);
}
